iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Mobile Development

寫Jetpack Compose ,會很有畫面哦!系列 第 29

寫Jetpack Compose ,會很有畫面哦! - Day29 Compose 測試撰寫版面配置

  • 分享至 

  • xImage
  •  

Compose 測試撰寫版面配置

程式完成後,不管如何都要測試,unit test 、sit test 和 uat test 都要pass 才可以上架,issue 和 bug 越早被測試出來,修改成本越低呀。

設定

在build.gradle 新增包含 UI 測試模組的依附元件

// Test rules and transitive dependencies:
androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
// Needed for createComposeRule, but not createAndroidComposeRule:
debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

ComposeTestRule

ComposeTestRule 可以設定撰寫內容或存取活動.
在專案(androidtest)新增測試 

class MyComposeTest {
    @get:Rule
    val composeTestRule = createComposeRule()
    // use createAndroidComposeRule<YourActivity>() if you need access to
    // an activity

    @Test
    fun myTest() {
        // Start the app
        composeTestRule.setContent {
           
                Greeting("Android")
           
        }
		//動作 
        composeTestRule.onNodeWithText("Hello Android!").performClick()

		//使用 printToLog() 顯示語意樹狀結構
        composeTestRule.onRoot().printToLog("TAG")

		//比對未合併樹狀結構的節點,可以將 useUnmergedTree 設為 true
        composeTestRule.onRoot(useUnmergedTree = true).printToLog("TAG")
		//比對器
        composeTestRule.onNodeWithText("Hello Android!").assertIsDisplayed()

    }
}

測試成功
https://ithelp.ithome.com.tw/upload/images/20221005/20121643Iev7QSrxn9.png

動作 如要在節點中插入動作,請呼叫 perform…() 函式

composeTestRule.onNodeWithText("Hello Android!").performClick()

使用 printToLog() 顯示語意樹狀結構

    composeTestRule.onRoot().printToLog("TAG")

輸出

printToLog:
                                                                                                    Printing with useUnmergedTree = 'false'
                                                                                                    Node #1 at (l=0.0, t=36.0, r=132.0, b=65.0)px
                                                                                                     |-Node #2 at (l=0.0, t=36.0, r=132.0, b=65.0)px
                                                                                                       Text = '[Hello Android!]'
                                                                                                       Actions = [GetTextLayoutResult]

比對未合併樹狀結構的節點,可以將 useUnmergedTree 設為 true

    composeTestRule.onRoot(useUnmergedTree = true).printToLog("TAG")

輸出

printToLog:
                                                                                                    Printing with useUnmergedTree = 'true'
                                                                                                    Node #1 at (l=0.0, t=36.0, r=132.0, b=65.0)px
                                                                                                     |-Node #2 at (l=0.0, t=36.0, r=132.0, b=65.0)px
                                                                                                       Text = '[Hello Android!]'
                                                                                                       Actions = [GetTextLayoutResult]

比對器 比對輸出結果

composeTestRule.onNodeWithText("Hello Android!").assertIsDisplayed()
Compose Testing 一覽表中瀏覽完整清單

https://ithelp.ithome.com.tw/upload/images/20221005/20121643g4yTzAQugw.png

參考:

https://developer.android.com/jetpack/compose/testing

Kotlin 的技術傳教士 - 范聖佑 近期也出了一本關於 Collection 的書 - Kotlin Collection 全方位解析攻略
裡面也有蠻多 operator 的介紹,歡迎大家有興趣的參考看看
https://www.tenlong.com.tw/products/9786263331136

Android Taipei Organize - 洪彥彬 (Yanbin), 終於出書了 - 從0到0.99 Android 架構開發實戰:以便利貼應用程式為例(iThome鐵人賽系列書),這本也有用compose ui 哦
https://www.tenlong.com.tw/products/9786263332577


上一篇
寫Jetpack Compose ,會很有畫面哦! - Day28 Compose 和其他程式庫
下一篇
寫Jetpack Compose ,會很有畫面哦! - Day30 經過30天 Compose 好用嗎
系列文
寫Jetpack Compose ,會很有畫面哦!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言